#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time   : 2021/7/18 20:00
# @Author : cjw
from typing import Optional
from jsonpath import jsonpath

from server_task.api.wework_api import WeWorkApi


class TagApi(WeWorkApi):
    """标签管理"""

    def get(self):
        """
        获取标签列表
        :return:
        """
        data = {
            'method': 'get',
            'url': f'{self.base_url}/tag/list',
            'params': {'access_token': self.token}
        }
        return self.request(data)

    def create(self, tag_name, tag_id: Optional[int] = None, **kwargs):
        """
        创建标签
        :param tag_name: 标签名称
        :param tag_id:  标签id
        :return:
        """
        if 'json' in kwargs:
            json_data = kwargs.get('json')
        else:
            json_data = {'tagname': tag_name, 'tagid': tag_id}

        data = {
            'method': 'post',
            'url': f'{self.base_url}/tag/create',
            'params': {'access_token': self.token},
            'json': json_data
        }
        return self.request(data)

    def update(self, tag_id, tag_name, **kwargs):
        """
        更新标签名字
        :param tag_id: 标签ID
        :param tag_name: 标签名称
        :return:
        """
        if 'json' in kwargs:
            json_data = kwargs.get('json')
        else:
            json_data = {'tagid': tag_id, 'tagname': tag_name}

        data = {
            'method': 'post',
            'url': f'{self.base_url}/tag/update',
            'params': {'access_token': self.token},
            'json': json_data
        }
        return self.request(data)

    def delete(self, tag_id, **kwargs):
        """
        删除标签
        :param tag_id: 标签ID
        :param kwargs:
        :return:
        """
        if 'json' in kwargs:
            json_data = kwargs.get('json')
            json_data.update(access_token=self.token)
        else:
            json_data = {'tagid': tag_id, 'access_token': self.token}

        data = {
            'method': 'get',
            'url': f'{self.base_url}/tag/delete',
            'params': json_data
        }
        return self.request(data)

    @property
    def tag_name_list(self):
        """获取标签名称列表"""
        return jsonpath(self.get().json(), '$..tagname')
